package dp;

/**
 * @author pengfei.hpf
 * @date 2020/2/11
 * @verdion 1.0.0
 * Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.
 *
 * Example:
 *
 * nums = [1, 2, 3]
 * target = 4
 *
 * The possible combination ways are:
 * (1, 1, 1, 1)
 * (1, 1, 2)
 * (1, 2, 1)
 * (1, 3)
 * (2, 1, 1)
 * (2, 2)
 * (3, 1)
 *
 * Note that different sequences are counted as different combinations.
 *
 * Therefore the output is 7.
 *  
 *
 * Follow up:
 * What if negative numbers are allowed in the given array?
 * How does it change the problem?
 * What limitation we need to add to the question to allow negative numbers?
 *
 * Credits:
 * Special thanks to @pbrother for adding this problem and creating all test cases.
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/combination-sum-iv
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class CombinationSum4 {
    public int combinationSum4(int[] nums, int target) {
        if(nums == null || nums.length == 0 || target <0){
            return 0;
        }
        int[] dp = new int[target+1];
        dp[0]=1;
        for(int i = 1; i <= target; i ++){
            for(int j = 0; j < nums.length; j ++){
                if(nums[j] <= i){
                    dp[i] = dp[i] + dp[i- nums[j]];
                }
            }
        }
        return dp[target];
    }
}
